home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Snippets / PopupMenu Tester 1.0.3 / Tester.c < prev    next >
C/C++ Source or Header  |  1996-07-07  |  3KB  |  132 lines

  1. /* ----------------------------------------------------------------------
  2.  
  3.     PopupMenu Tester
  4.     version 1.0.3
  5.     
  6.     Written by: Paul Celestin
  7.     
  8.     This simple application demonstrates the use of a System-7 popup menu,
  9.     as well as a movable modal dialog. It doesn't do much else, but maybe
  10.     it has something to offer to someone who is new to all of this.
  11.     
  12.     941103 - 1.0.0 - initial version
  13.     951215 - 1.0.2 - updated for CW7
  14.     960707 - 1.0.3 - updated for CW9
  15.  
  16. ---------------------------------------------------------------------- */
  17.  
  18. #include    <Dialogs.h>
  19. #include    <Events.h>
  20.  
  21. #define        kTestDLOG    128
  22. #define        kMenu        128
  23. #define        kItemQuit    1
  24. #define        kItemPopup    2
  25. #define        kDelay        8
  26.  
  27. Boolean        gDone = false;
  28.  
  29. pascal Boolean ModalFilter(DialogPtr inDialog, EventRecord *event, short *item)
  30. {
  31.     Boolean done = false;
  32.  
  33.     switch (event->what)
  34.     {
  35.         case mouseDown:
  36.         {
  37.             WindowPtr    myWindow;
  38.             RgnHandle    theGrayRgn;
  39.  
  40.             short thePart = FindWindow(event->where,&myWindow);
  41.             if ((thePart == inDrag) && (myWindow == inDialog))
  42.             {
  43.                 theGrayRgn = GetGrayRgn();
  44.                 DragWindow(myWindow,event->where,&((**theGrayRgn).rgnBBox));
  45.                 done = true;
  46.             }
  47.         }
  48.         break;
  49.         
  50.         case keyDown:
  51.         {
  52.             char typedChar = event->message & 0x00FF;
  53.  
  54.             switch (typedChar)
  55.             {
  56.                 case 0x03: /* the Enter key */
  57.                 case 0x0D: /* the Return key */
  58.                 {
  59.                     short    iType,iValue;
  60.                     long    delay;
  61.                     Handle    iHandle;
  62.                     Rect    iRect;
  63.                     
  64.                     GetDItem(inDialog,kItemQuit,&iType,&iHandle,&iRect);
  65.                     if (iHandle) /* it exists */
  66.                     {
  67.                         iValue = !GetCtlValue((ControlHandle)iHandle);
  68.                         HiliteControl((ControlHandle)iHandle,1);
  69.                         Delay(kDelay,&delay);
  70.                         HiliteControl((ControlHandle)iHandle,0);
  71.                     }
  72.                     done = true;
  73.                     gDone = true;
  74.                 }
  75.                 break;
  76.             }
  77.         }
  78.         break;
  79.         
  80.         default:
  81.         break;
  82.  
  83.         }
  84.     return done;
  85. }
  86.  
  87. main()
  88. {
  89.     short            itemType, itemHit, myChoice;
  90.     Str255            myTitle;
  91.     DialogPtr        myDialog;
  92.     ModalFilterUPP    myDragProc = (ModalFilterUPP)ModalFilter;
  93.     Handle            myPopHandle;
  94.     MenuHandle        myMenu;
  95.     Rect            myPopRect;
  96.  
  97.     InitGraf(&qd.thePort);
  98.     InitFonts();
  99.     InitWindows();
  100.     InitMenus();
  101.     TEInit();
  102.     InitDialogs(0);
  103.     InitCursor();
  104.  
  105.     myDialog = GetNewDialog(kTestDLOG,0,(WindowPtr) -1);
  106.     if (myDialog)
  107.     {
  108.         ShowWindow(myDialog);
  109.         while (!gDone)
  110.         {
  111.             ModalDialog(myDragProc,&itemHit);
  112.  
  113.             switch(itemHit)
  114.             {
  115.                 case kItemQuit:
  116.                     gDone = true;
  117.                 break;
  118.  
  119.                 case kItemPopup:
  120.                     /* user selected the popup menu, let's show selection in title bar */
  121.                     GetDItem(myDialog,kItemPopup,&itemType,&myPopHandle,&myPopRect);
  122.                     myChoice = GetCtlValue((ControlHandle)myPopHandle);
  123.                     myMenu = GetMenu(kMenu);
  124.                     GetItem(myMenu,myChoice,myTitle);
  125.                     SetWTitle(myDialog,myTitle);
  126.                 break;
  127.             }
  128.         }
  129.         DisposeDialog(myDialog);
  130.     }
  131. }
  132.